package day23;

import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * 步骤：
 * 1.建立服务端的ServerSocket,并监听一个端口。给服务端程序打标识
 * 2.获取连接过来的客服端对象，通过ServerSocket的accept方法，没有连接就会等，是一个阻塞式方法
 * 3.客服端如果发过来了数据，那么服务端要使用对应的客服端对象，并获取该客服端对象的读取流来读取发过来的数据
 * 4.关闭服务端（可选），但是要关闭客服端
 */

/**
 *
 * TcpServer.java
 * @author wangbiao<br/>
 *         email:785497344@qq.com
 * @description TCP的服务端
 * @since 1.0.0
 * @date 2013-7-9下午11:58:06
 *
 */
public class TcpServer {

	public static void main(String[] args) {
		ServerSocket ss = null;
		Socket s = null;
		try {
			//建立服务端的ServerSocket,并监听一个端口。
			ss = new ServerSocket(10004);
			//通过accept方法接收客服端对象
			s = ss.accept();
			String ip = ss.getInetAddress().getHostAddress();
			//获取到客服端对象的读取流
			InputStream is = s.getInputStream();
			byte[] buf = new byte[1024];
			int len = 0;
			System.out.println("ip="+ip);
			while ((len=is.read(buf))!=-1) {
				System.out.println(new String(buf, 0, len));
			}
			
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			//关闭客服端对象，服务端对象一般是不关闭的，因为要进行多次服务
			if (null != s) {
				try {
					s.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	}
}
